package com.kang.user.client;

import com.kang.common.R;
import com.kang.user.to.BrandTo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;

/**
 * ManagerClient 熔断工厂实现
 *
 * 提供在 "kang-manager" 服务不可用时的降级处理逻辑。
 */
@Component
@Slf4j
public class ManagerClientFactoryImpl implements FallbackFactory<ManagerClient> {

	@Override
	public ManagerClient create(Throwable cause) {
		// 记录熔断触发的异常信息
		log.error("ManagerClient 服务调用失败: {}", cause.getMessage(), cause);

		return new ManagerClient() {
			@Override
			public R findAll(String s) {
				log.warn("Fallback: 调用 findAll 方法失败.");
				return R.error("(fallbackFactory) 无法访问 kang-manager 服务 --> findAll()");
			}

			@Override
			public R findById(Long id) {
				log.warn("Fallback: 调用 findById 方法失败. ID: {}", id);
				return R.error("(fallbackFactory) 无法访问 kang-manager 服务 --> findById()");
			}

			@Override
			public R add(BrandTo brand) {
				log.warn("Fallback: 调用 add 方法失败. 品牌: {}", brand);
				return R.error("(fallbackFactory) 无法访问 kang-manager 服务 --> add()");
			}
		};
	}
}
